/**
 * 
 */
package com.gaolinjie.common;

import com.gaolinjie.model._MappingKit;
import com.gaolinjie.routes.AdminRoute;
import com.gaolinjie.routes.FrontRoute;
import com.gaolinjie.service.ShareMethod;
import com.gaolinjie.service.ShareObject;
import com.jfinal.config.Constants;
import com.jfinal.config.Handlers;
import com.jfinal.config.Interceptors;
import com.jfinal.config.JFinalConfig;
import com.jfinal.config.Plugins;
import com.jfinal.config.Routes;
import com.jfinal.core.JFinal;
import com.jfinal.ext.handler.ContextPathHandler;
import com.jfinal.kit.PathKit;
import com.jfinal.kit.PropKit;
import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.jfinal.plugin.cron4j.Cron4jPlugin;
import com.jfinal.plugin.druid.DruidPlugin;
import com.jfinal.plugin.ehcache.EhCachePlugin;
import com.jfinal.plugin.redis.RedisPlugin;
import com.jfinal.render.ViewType;
import com.jfinal.template.Engine;
import com.sun.org.apache.bcel.internal.generic.NEW;

/**
 * @author jinyulinlang 2018年7月15日
 */
public class Myconfig extends JFinalConfig {

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * com.jfinal.config.JFinalConfig#configConstant(com.jfinal.config.Constants)
	 */
	@Override
	public void configConstant(Constants constants) {
		// 加载少量必要配置，随后可用PropKit.get(...)获取值
		PropKit.use("a_little_config.txt");

		// 文件下载路径
		constants.setBaseDownloadPath("download");
		// 文件上传路径
		constants.setBaseUploadPath("upload");
		// 设置缓存
		// constants.setCaptchaCache();
		// 配置 configPlugin(Plugins me) 在 JFinalConfig 中被调用的次序.
		// constants.setConfigPluginOrder(configPluginOrder);
		// 设置控制类的工厂类
		// constants.setControllerFactory(controllerFactory);
		// 设置开发模式
		constants.setDevMode(PropKit.getBoolean("devMode", false));
		// 设置编码格斯
		constants.setEncoding("UTF-8");
		// 设置模板延迟更新的时间
		// constants.setFreeMarkerTemplateUpdateDelay(delayInSeconds);
		// 设置视图类型
		constants.setViewType(ViewType.JFINAL_TEMPLATE);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see com.jfinal.config.JFinalConfig#configEngine(com.jfinal.template.Engine)
	 */
	@Override
	public void configEngine(Engine engine) {
		// 设置基本路径（这个是默认的路径可以省略）
		engine.setBaseTemplatePath(PathKit.getWebRootPath());
		// 把页面定义的方法分享到全局
		engine.addSharedFunction("/front/common.html");
		engine.addSharedStaticMethod(ShareObject.class);
		engine.addSharedMethod(new ShareMethod());

	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see com.jfinal.config.JFinalConfig#configHandler(com.jfinal.config.Handlers)
	 */
	@Override
	public void configHandler(Handlers handlers) {
		handlers.add(new ContextPathHandler("ctx"));

	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see com.jfinal.config.JFinalConfig#configInterceptor(com.jfinal.config.
	 * Interceptors)
	 */
	@Override
	public void configInterceptor(Interceptors arg0) {

	}

	public static DruidPlugin createDruidPlugin() {
		return new DruidPlugin(PropKit.get("jdbcUrl"), PropKit.get("user"), PropKit.get("password").trim());
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see com.jfinal.config.JFinalConfig#configPlugin(com.jfinal.config.Plugins)
	 */
	@Override
	public void configPlugin(Plugins plugins) {
		// 配置 druid 数据库连接池插件
		DruidPlugin druidPlugin = new DruidPlugin(PropKit.get("jdbcUrl"), PropKit.get("user"),
				PropKit.get("password").trim());
		plugins.add(druidPlugin);

		// 配置ActiveRecord插件
		ActiveRecordPlugin arp = new ActiveRecordPlugin(druidPlugin);
		// 配置sql的模板文件
		arp.setBaseSqlTemplatePath(PathKit.getWebRootPath() + "/WEB-INF");
		arp.addSqlTemplate("/sql/demo.sql");
		// 所有映射在 MappingKit 中自动化搞定
		_MappingKit.mapping(arp);
		plugins.add(arp);
		plugins.add(new EhCachePlugin());
		/*****
		 * redis缓存 *String cacheName, String host, int port, int timeout, String
		 * password, int database, String clientName
		 ******/
		RedisPlugin rp = new RedisPlugin("redisCache", "192.168.206.129", 6379, 123456);
		plugins.add(rp);
		/*** cron定时任务的配置 ******/
		Cron4jPlugin cron = new Cron4jPlugin(PropKit.use("cron4j.properties"), "cron4j");
		plugins.add(cron);

	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see com.jfinal.config.JFinalConfig#configRoute(com.jfinal.config.Routes)
	 */
	@Override
	public void configRoute(Routes routes) {
		routes.add(new FrontRoute());
		routes.add(new AdminRoute());
	}

	@Override
	public void afterJFinalStart() {
		System.out.println("启动之后要做一些事情-------------");
	}

	@Override
	public void beforeJFinalStop() {
		System.out.println("关闭之前要做一些事情-------------");
	}

	public static void main(String[] args) {
		JFinal.start("src/main/webapp", 80, "/");
	}
}
